Lower Bounded Wildcards (<? super T>)

Java Technologies - জাভা জেনেরিক্স (Java Generics) - Wildcards এর ধারণা
206

Lower Bounded Wildcards (<? super T>) জাভা জেনেরিক্সের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি ব্যবহার করা হয় এমন ডেটা টাইপের জন্য যেখানে প্যারামিটারাইজড টাইপটি T বা T-এর সুপারক্লাস হতে পারে।


Lower Bounded Wildcards কী?

<? super T> নির্দেশ করে যে জেনেরিক টাইপটি T বা তার যেকোনো সুপারক্লাস হতে পারে। এটি সাধারণত write operations (ডেটা ইনসার্ট) এর ক্ষেত্রে ব্যবহৃত হয়।


Lower Bounded Wildcards এর সিনট্যাক্স

<? super T>
  • এখানে T হল টাইপ প্যারামিটার।
  • এটি T এবং T-এর সুপারক্লাসগুলিকে গ্রহণ করে।

Lower Bounded Wildcards কেন ব্যবহার করা হয়?

  1. Write Operations সহজ করতে:
    Lower Bounded Wildcards ডেটা ইনসার্টের জন্য সুবিধাজনক, কারণ এটি নিশ্চিত করে যে অবজেক্টটি উপযুক্ত টাইপ বা তার সুপারক্লাসের হবে।
  2. ইনহেরিটেন্স সংক্রান্ত সীমাবদ্ধতা দূর করতে:
    এটি ব্যবহার করে আপনি এমন জেনেরিক ডেটা স্ট্রাকচার তৈরি করতে পারেন যা নির্দিষ্ট টাইপ এবং তার সুপারক্লাস উভয়ের সাথে কাজ করতে পারে।

উদাহরণ: Lower Bounded Wildcards

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void addElements(List<? super Integer> list) {
        list.add(10);
        list.add(20);
        list.add(30);
        // list.add("String"); // Compile-time error: Only Integer or its superclass is allowed
    }

    public static void main(String[] args) {
        List<Number> numbers = new ArrayList<>();
        addElements(numbers);

        List<Object> objects = new ArrayList<>();
        addElements(objects);

        System.out.println(numbers);
        System.out.println(objects);
    }
}
আউটপুট:
[10, 20, 30]
[10, 20, 30]

Lower Bounded Wildcards এর বৈশিষ্ট্য

  1. Write Operations:
    • আপনি T বা তার সাবটাইপ যোগ করতে পারেন।
    • উদাহরণ:

      public void addNumbers(List<? super Integer> list) {
          list.add(10);  // Allowed
          list.add(15);  // Allowed
      }
      
  2. Read Operations সীমাবদ্ধ:
    • ডেটা পড়ার সময় টাইপ ইনফরমেশন হারিয়ে যায়, তাই Object হিসাবে ডেটা রিটার্ন হয়।
    • উদাহরণ:

      List<? super Integer> list = new ArrayList<>();
      list.add(10);
      Object obj = list.get(0); // Returns Object, not Integer
      
  3. Type Compatibility:
    <? super T> শুধুমাত্র T এবং তার সুপারক্লাসের সাথে কাজ করে। এটি সাবটাইপগুলির ক্ষেত্রে কার্যকর নয়।

Lower Bounded Wildcards এবং Collections Framework

Lower Bounded Wildcards সাধারণত Collections Framework-এ ব্যবহৃত হয় যেখানে write-heavy অপারেশন দরকার।

উদাহরণ: Collections.sort() এর Lower Bounded Wildcard

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> intList = Arrays.asList(3, 1, 4, 2);
        List<Number> numberList = Arrays.asList(3, 1.5, 4, 2.0);

        // Sort Integer List
        sortList(intList);
        System.out.println(intList);

        // Sort Number List
        sortList(numberList);
        System.out.println(numberList);
    }

    public static void sortList(List<? super Integer> list) {
        list.sort(null); // Uses natural ordering
    }
}
আউটপুট:
[1, 2, 3, 4]
[1.5, 2.0, 3, 4]

Lower Bounded Wildcards বনাম Upper Bounded Wildcards

বৈশিষ্ট্যLower Bounded Wildcards (<? super T>)Upper Bounded Wildcards (<? extends T>)
রিড অপারেশনObject টাইপ রিটার্ন করে।নির্দিষ্ট টাইপ বা তার সাবক্লাস রিটার্ন করে।
রাইট অপারেশনWrite-heavy অপারেশন সহজ করে।Write অপারেশন সীমাবদ্ধ।
ইনহেরিটেন্সT এবং তার সুপারক্লাসের সাথে কাজ করে।T এবং তার সাবক্লাসের সাথে কাজ করে।

Lower Bounded Wildcards এর সুবিধা

  1. টাইপ সেফ ডেটা ইনসার্ট:
    নির্দিষ্ট টাইপ বা তার সুপারক্লাস ছাড়া অন্য কোনো টাইপ ইনসার্ট করা যাবে না।
  2. ইনহেরিটেন্সের সমস্যা সমাধান:
    T এবং তার সুপারক্লাস উভয়ের জন্য একই মেথড ব্যবহার করা সম্ভব।
  3. Flexible কোড:
    একাধিক টাইপের জন্য একক জেনেরিক মেথড বা ক্লাস ব্যবহার করা যায়।

Lower Bounded Wildcards এর সীমাবদ্ধতা

  1. Read Operations সীমিত:
    টাইপ ইনফরমেশন লোপ পায়, ফলে Object টাইপে ডেটা রিটার্ন হয়।
  2. Type Compatibility আরও সুনির্দিষ্ট হতে পারে:
    সব টাইপের সাথে কাজ করে না, শুধুমাত্র সুপারক্লাস বা নির্দিষ্ট টাইপের সাথে কাজ করে।

সংক্ষেপে

  • Lower Bounded Wildcards (<? super T>) এমন ডেটা টাইপ গ্রহণ করে যা T বা তার সুপারক্লাস হতে পারে।
  • এটি সাধারণত write-heavy অপারেশনের জন্য ব্যবহৃত হয়।
  • Collections Framework এবং Generics-সমৃদ্ধ কোডে Lower Bounded Wildcards খুব কার্যকরী।

Generics-এর এই বৈশিষ্ট্যটি টাইপ সেফটি এবং কোড রিইউজেবিলিটির জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...